﻿#include <stdio.h>

//main33：二维数组的定义和内存模型
int main33(void)
{
	//1.二维数组的定义；
	int arr[2][3];
	//arr[0][0]; arr[0][1]; arr[0][2];
	//arr[1][0]; arr[1][1]; arr[1][2];

	printf("2.二维数组arr的长度：%d\n", sizeof(arr));//24--->2*3*4
	printf("3.二维数组arr中一行的长度：%d\n", sizeof(arr[0]));//12--->3*4
	printf("4.二维数组arr的行数：%d\n", sizeof(arr) / sizeof(arr[0]));//2
	printf("5.二维数组arr的列数：%d\n", sizeof(arr[0]) / sizeof(arr[0][0]));//3

	printf("6.请输入二维数组arr的元素，按回车键结束：\n");//6.请输入二维数组arr的元素，按回车键结束：1 ... 6
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		for (int j = 0; j < sizeof(arr[0]) / sizeof(arr[0][0]); j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}

	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
	{
		for (int j = 0; j < sizeof(arr[0]) / sizeof(arr[0][0]); j++)
		{
			printf("7.输出二维数组arr的元素，第%d行%d列：%d\n", i, j, arr[i][j]);
			//7.输出二维数组arr的元素，第0行0列：1 ... 7.输出二维数组arr的元素，第1行2列：6
		}
	}

	//8.二维数组的内存模型；
	printf("9.二维数组的内存首地址：%p\n", arr);//0031FB4C
	printf("10.二维数组的内存首行地址：%p\n", arr[0]);//0031FB4C
	printf("11.二维数组的内存第二行地址：%p\n", arr[1]);//0031FB58

	//13.注意：输出地址值时，如果是元素地址值，就得加上【&】；而是数组名的话，就不用加，直接输出。
	printf("12.二维数组的内存首个元素的地址：%p\n", &arr[0][0]);//0031FB4C
	printf("14.二维数组的内存首行第二个元素的地址：%p\n", &arr[0][1]);//0031FB50
	printf("15.二维数组的内存首行第三个元素的地址：%p\n", &arr[0][2]);//0031FB54

	printf("16.二维数组的内存第二行第一个元素的地址：%p\n", &arr[1][0]);//0031FB58
	printf("17.二维数组的内存第二行第二个元素的地址：%p\n", &arr[1][1]);//0031FB5C
	printf("18.二维数组的内存第二行第三个元素的地址：%p\n", &arr[1][2]);//0031FB60

	return 0;
}